ReceiptVerifier.verifyFieldSchema   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 9
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2.0625

Importance

Changes 0
Metric Value
cc 2
eloc 8
dl 0
loc 9
ccs 3
cts 4
cp 0.75
crap 2.0625
rs 10
c 0
b 0
f 0
1 1
import { Any, Constructed, Integer, ObjectIdentifier, OctetString, Sequence, Set, verifySchema } from 'asn1js'
2
3 1
import { CONTENT_ID, FIELD_TYPE_ID, FIELD_VALUE_ID } from './constants'
4
5 1
export class ReceiptVerifier {
6
  private readonly receiptSchema: Sequence
7
  private readonly fieldSchema: Sequence
8
9
  constructor() {
10 5
    this.receiptSchema = new Sequence({
11
      value: [
12
        new ObjectIdentifier(),
13
        new Constructed({
14
          idBlock: { tagClass: 3, tagNumber: 0 },
15
          value: [
16
            new Sequence({
17
              value: [
18
                new Integer(),
19
                new Set({
20
                  value: [
21
                    new Sequence({
22
                      value: [new ObjectIdentifier(), new Any()],
23
                    }),
24
                  ],
25
                }),
26
                new Sequence({
27
                  value: [
28
                    new ObjectIdentifier(),
29
                    new Constructed({
30
                      idBlock: { tagClass: 3, tagNumber: 0 },
31
                      value: [new OctetString({ name: CONTENT_ID })],
32
                    }),
33
                  ],
34
                }),
35
              ],
36
            }),
37
          ],
38
        }),
39
      ],
40
    })
41
42 5
    this.fieldSchema = new Sequence({
43
      value: [
44
        new Integer({ name: FIELD_TYPE_ID }),
45
        new Integer(),
46
        new OctetString({ name: FIELD_VALUE_ID }),
47
      ],
48
    })
49
  }
50
51
  public verifyReceiptSchema(receipt: string) {
52 4
    const receiptVerification = verifySchema(Buffer.from(receipt, 'base64'), this.receiptSchema)
53 4
    if (!receiptVerification.verified) {
54 1
      throw new Error('Receipt verification failed.')
55
    }
56
57 3
    return receiptVerification
58
  }
59
60
  public verifyFieldSchema(sequence: Sequence) {
61 348
    const fieldVerification = verifySchema(sequence.toBER(), this.fieldSchema)
62 348
    if (!fieldVerification.verified) {
63
      // Return null if the field schema verification fails, so we can skip the field
64
      return null
65
    }
66
67 348
    return fieldVerification
68
  }
69
}
70